Qt5.2文档翻译:QPainter类,QPainter Class
定义了所支持的那些数字图片合成模式。合成模式,指的是,源图片中的那些像素,应当如何与目标图片中的像素合并起来。
请注意,那些以 RasterOp 前缀开头的按位进行 的光栅操作模式,只在X11 和光栅绘图引擎中 被原生支持。 这就意味着, 在 Mac 上,唯一一个利用这些模式的方式就是,使用 QImage 。对于 带有透明分量的画笔和画刷, 以RasterOp 开头的混合模式是 不 被支持的。另外 ,开启 QPainter::Antialiasing 这个渲染建议的话,也会禁用掉RasterOp 模式。
最常见的类型是SourceOver (通常被称作透明混合) ,这种模式下,源图片中的像素被混合到目标图片的对应像素之上,并且,源图片中的透明分量定义了该像素的透明度。
当绘图设备是一个 QImage 的时候,图片格式必须 被设置为 Format_ARGB32_Premultiplied 或 Format_ARGB32 ,才能使得 这些合成模式产生真正的效果。出于性能方面 的考虑, 预乘版本的格式是首选的格式。
当设置了合成模式之后,它就会应用到所有的绘图操作符、画笔、画刷、渐变和位图/图片绘制操作上。
常量 |
值 |
说明 |
QPainter::CompositionMode_So urceOver |
0 |
这是默认模式。源图片中的透明分量被用于将当前像 素混合到目标图片的对应像素上。 |
QPainter::CompositionMode_DestinationOver |
1 |
目标图片中的透明分量被用于将当前像素混合到源图片的对应像素上。这个模式与CompositionMode_SourceOver 相反。 |
QPainter::CompositionMode_Clear |
2 |
无论源图片中对应的像素是什么值,目标图片中的像素都会全部被清除(被设置为完全透明)。 |
QPainter::CompositionMode_Source |
3 |
输出内容即为源图片中的像素。(这意味着,就是一个基本的复制操作,并且,当源图片中的像素是完全不透明的时候,此模式与SourceOver 等价)。 |
QPainter::CompositionMode_Destination |
4 |
输出内容即为目标图片中的像素。这意味着,混合动作无效果。此模式与CompositionMode_Source 相反。 |
QPainter::CompositionMode_SourceIn |
5 |
输出内容即为源图片中的像素,并且,其图案被目标图片中的透明分量裁减。 |
QPainter::CompositionMode_DestinationIn |
6 |
输出内容即为目标图片中的像素,并且,其图案被源图片中的透明分量裁减。此模式与CompositionMode_SourceIn 相反。 |
QPainter::CompositionMode_SourceOut |
7 |
输出内容即为源图片中的像素,并且,其图案被目标图片中透明分量的相反图案裁减。 |
QPainter::CompositionMode_DestinationOut |
8 |
输出内容即为目标图片中的像素,并且,其图案被源图片中透明分量的相反图案裁减。此模式与CompositionMode_SourceOut相反。 |
QPainter::CompositionMode_SourceAtop |
9 |
源图片中的像素被覆盖于目标图片的对应像素之上,并且,源图片中的像素被目标图片中的透明分量裁减。 |
QPainter::CompositionMode_DestinationAtop |
10 |
目标图片中的像素被覆盖于源图片的对应像素之上,并且,目标图片中的像素被源图片中的透明分量裁减。此模式与CompositionMode_SourceAtop 相反。 |
QPainter::CompositionMode_Xor |
11 |
源图片中的像素被目标图片中透明分量的相反图案裁减,目标图片中的像素被源图片中透明分量的相反图案裁减,然后,二者合并。 CompositionMode_Xor与按位进行的Xor不同。 |
QPainter::CompositionMode_Plus |
12 |
源图片和目标图片的透明分量和颜色值都会相加。 |
QPainter::CompositionMode_Multiply |
13 |
输出内容为,源图片中的颜色与目标图片中的颜色相乘。将一个颜色与白色相乘,则会让它保持原来的颜色,将一个颜色与黑色相乘,会让它变成黑色。 |
QPainter::CompositionMode_Screen |
14 |
源图片和目标图片中的颜色,首先被反转,然后相乘。使用白色来对一个颜色进行筛选(Screening)操作,会产生白色,而使用黑色来对一个颜色进行筛选操作,会让该颜色保持原样。 |
QPainter::CompositionMode_Overlay |
15 |
按照目标图片中各个像素的颜色,来对当前像素的颜色进行相乘或筛选操作。目标图片中的颜色会与源图片中的颜色混合,以反映目标图片的明亮或黑暗属性。 |
QPainter::CompositionMode_Da rken |
16 |
对于输出内容中的每个像素,会选取源图片和目标图 片中较暗的那个颜色。 |
QPainter::CompositionMode_Lighten |
17 |
对于输出内容中的每个像素,会选取源图片和目标图片中较亮的那个颜色。 |
QPainter::CompositionMode_ColorDodge |
18 |
目标图片中各个像素的颜色会被变亮,以反映源图片中的颜色。如果源图片中某个像素是黑色的,则会让目标图片中对应像素的颜色保持不变。 |
QPainter::CompositionMode_ColorBurn |
19 |
目标图片中各个像素的颜色会被变暗,以反映源图片中的颜色。如果源图片中某个像素是白色的,则会让目标图片中对应像素的颜色保持不变。 |
QPainter::CompositionMode_HardLight |
20 |
按照源图片中各个像素的颜色,对当前像素的颜色进行相乘或筛选操作。明亮的源图片像素颜色会使得目标图片中相应像素的颜色变亮,黑暗的源图片像素颜色会使得目标图片中相应像素的颜色变暗。 |
QPainter::CompositionMode_SoftLight |
21 |
按照源图片中各个像素的颜色,将当前像素的颜色变暗或变亮。类似于CompositionMode_HardLight。 |
QPainter::CompositionMode_Difference |
22 |
将较亮的颜色减去较暗的颜色。在这种模式下,以白色绘制则会反转目标图片中的颜色,以黑色绘制则会令目标图片中的颜色保持不变。 |
QPainter::CompositionMode_Exclusion |
23 |
类似于CompositionMode_Difference,但是对比度较低。在这种模式下,以白色绘制则会反转目标图片中的颜色,以黑色绘制则会令目标图片中的颜色保持不变。 |
QPainter::RasterOp_SourceOrDestination |
24 |
对源图片和目标图片中对应的像素,进行一次按位的或(OR)操作(src OR dst)。 |
QPainter::RasterOp_SourceAndDestination |
25 |
对源图片和目标图片中对应的像素,进行一次按位的与(AND)操作(src AND dst)。 |
QPainter::RasterOp_SourceXorDestination |
26 |
对源图片和目标图片中对应的像素,进行一次按位的异或(XOR)操作(src XOR dst)。 |
QPainter::RasterOp_NotSourceAndNotDestination |
27 |
对源图片和目标图片中对应的像素,进行一次按位的或非(NOR)操作((NOT src) AND (NOT dst))。 |
QPainter::RasterOp_NotSourceOrNotDestination |
28 |
对源图片和目标图片中对应的像素,进行一次按位的与非(NAND)操作((NOT src) OR (NOT dst))。 |
QPainter::RasterOp_NotSourceXorDestination |
29 |
将源图片中的像素值反转,然后与目标图片中对应的像素进行按位的异或操作((NOT src) XOR dst)。 |
QPainter::RasterOp_NotSource |
30 |
对源图片中的各个像素进行一次按位的非操作(NOT src)。 |
QPainter::RasterOp_NotSourceAndDestination |
31 |
将源图片中的像素值反转,然后与目标图片中对应的像素进行按位的与操作((NOT src) AND dst)。 |
QPainter::RasterOp_SourceAndNotDestination |
32 |
将目标图片中的像素值反转,然后与源图片中对应的像素进行按位的与操作(src AND (NOT dst))。 |
QPainter::RasterOp_NotSource OrDestination |
33 |
将源图片中的像素值反转,然后与目标图片中对应的 像素进行按位的或操作((NOT src) OR dst)。 |
QPainter::RasterOp_ClearDestination |
35 |
无论源图片中的像素是什么颜色,都对目标图片中所有的像素进行清除操作(设置为0)。 |
QPainter::RasterOp_SetDestination |
36 |
无论源图片中的像素是什么颜色,都对目标图片中所有的像素进行设置操作(设置为1)。 |
QPainter::RasterOp_NotDestination |
37 |
对目标图片中的各个像素进行一次按位的非操作(NOT dst)。 |
QPainter::RasterOp_SourceOrNotDestination |
34 |
将目标图片中的像素值反转,然后与源图片中对应的像素进行按位的或操作(src OR (NOT dst))。 |
参考 compositionMode () 、 setCompositionMode () 、 合成模式 和 图片合成示例 。
立即应用并清空绘图管道 ,做好准备,以让用户 向底层图形上下文直接发送命令。后续必须调用 一次 endNativePainting () 。
注意 ,只有那些 由底层绘图引擎改变过的状态会被重置为它们相应的默认状态。 在不同的版本中,我们所重置的那些状态可能会不同。对于 OpenGL 2 引擎 ,以下状态会被重置:
•.混合会被禁用
•.深度、景深(stencil)和剪刀测试会被禁用
•.活动材质单元会被重置为0
•.深度掩码、深度函数和清空深度会被重置为它们的默认值
•.景深掩码、景深操作和景深函数会被重置为它们的默认值
•.当前颜色会被重置为纯白
例如,假设用户 在一个beginNativePaint()/ endNativePainting ()块中改变了 OpenGL 多边形模式,则, 它不会被 endNativePainting ()调用重置为默认状态。 以下是一个示例,展示了绘图命令 和原生 OpenGL 命令的混合使用:
QPainter painter(this);
painter. fillRect (0, 0, 128, 128, Qt ::green);
painter.beginNativePainting();
glEnable(GL_SCISSOR_TEST);
glScissor(0, 0, 64, 64);
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_SCISSOR_TEST);
painter. endNativePainting ();
此函数是从Qt 4.6开始引入的。
参考 endNativePainting () 。
返回当前的合成模式。
参考 CompositionMode 和 setCompositionMode () 。
结束绘图。在绘图时用到的任何资源都会被释放。一般情况下,妳不需要调用这个函数,因为它会被析构函数调用。
如果 该绘图器不再是活跃的,则返回真( true );否则返回 假( false )。
在手动执行了原生绘图命令之后,重置绘图器。让绘图器在调用任何其它绘图命令之前重置它所依赖的任何原生状态。
此函数是从Qt 4.6开始引入的。
参考 beginNativePainting () 。
将合成模式设置成 mode 。
警告: 只有 在 QImage 上做操作的 QPainter 才完整地支持所有的合成模式。正如 compositionMode () 中所说 ,以RasterOp 开头的模式在X11 中是被支持的。
参考 compositionMode () 。
张柏芝,陈冠希
Your opinions
HxLauncher: Launch Android applications by voice commands